<HTML><HEAD><TITLE>external(++PredSpec)</TITLE>
</HEAD><BODY>[ <A HREF="index.html">External Interface</A> | <A HREF="../../index.html">Reference Manual</A> | <A HREF="../../fullindex.html">Alphabetic Index</A> ]
<H1>external(++PredSpec)</H1>
Declares PredSpec to be a deterministic external predicate.


<DL>
<DT><EM>PredSpec</EM></DT>
<DD>Of the form Atom/Integer (predicate name/arity).
</DD>
</DL>
<H2>Description</H2>
   Declares the (may be not yet visible) predicate PredSpec to be a
   deterministic external predicate.

<P>
   This declaration is needed to compile calls to an external predicate
   before it is actually defined with external/2.

<P>

<H3>Modes and Determinism</H3><UL>
<LI>external(++) is det
</UL>
<H3>Modules</H3>
This predicate is sensitive to its module context (tool predicate, see @/2).
<H3>Exceptions</H3>
<DL>
<DT><EM>(4) instantiation fault </EM>
<DD>PredSpec is not instantiated.
<DT><EM>(5) type error </EM>
<DD>PredSpec is not of the form Atom/Integer.
<DT><EM>(62) inconsistent procedure redefinition </EM>
<DD>A call to PredSpec has already been compiled as a Prolog    call or a non-deterministic external call.
</DL>
<H2>Examples</H2>
<PRE>
Success:

   % compiling a call to an external before its definition (see description
   % of external/2 for detail on creating external predicates).
      [eclipse]: [user].
       :- import prmsg/1 from msg_lib.
       :- external(prmsg/1). % declare its call_type
       hello :- prmsg("hello").
       user      compiled 216 bytes in 0.03 seconds

   % definition of sines/2 will not raise an inconsistent type definition
   % thanks to the proper declaration above.
      [eclipse]: sh("cat msg_lib.pl").
      :- module(msg_lib).
      :- load('msg.o', "-lm"). % see example in external/2
      :- external(prmsg/1, p_prmsg).
      :- export prmsg/1.

      yes
      [eclipse]: [msg_lib].
       msg_lib.pl      compiled 0 bytes in 0.18 seconds
      yes.
      [eclipse]: hello.
      message: hello
      yes.

Error:
      external(PredSpec).            (Error 4).
      external("p/0").               (Error 5).

      [eclipse]: [user].
       p :- a.
       user   compiled 32 bytes in 0.00 seconds
      yes.
      [eclipse]: external(a/0).        (Error 62).



</PRE>
<H2>See Also</H2>
<A HREF="../../kernel/externals/external-2.html">external / 2</A>, <A HREF="../../kernel/externals/load-1.html">load / 1</A>
</BODY></HTML>
